//  不定参宏函数使用
#include <iostream>
#include <cstdarg>
#include <cstdlib>
#define LOG(fmt, ...) printf("[%s:%d] " fmt " \n", __FILE__, __LINE__, ##__VA_ARGS__)


//C语言中不定参函数使用

void printNum(int count, ...)
{
    va_list ap;
    va_start(ap, count);
    for(int i = 0; i < count; i++)
    {
        int num = va_arg(ap, int);
        printf("param[%d] : %d\n", i, num);
    }
    va_end(ap);  //将ap指针置空
}

void myprintf(const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    char* res;
    int ret = vasprintf(&res, fmt, ap);
    if(ret != -1)
    {
        printf(res);
        free(res);
    }
    va_end(ap);
}

// c++不定参函数使用

void xprintf()
{
    std::cout << std::endl;
}

template<class T, class ...Args>
void xprintf(const T &v, Args&& ...args)
{
    std::cout << v;
    if (sizeof...(args) > 0)
    {
        xprintf(std::forward<Args>(args)...);
    }
    else
    {
        xprintf();
    }
}

int main()
{
    // xprintf("张飞", "tom", 999);
    LOG("Error: %s", "Something went wrong");
    // printNum(2, 222, 444);
    // printNum(4, 000, 1, 99999, 100);
    // myprintf("%s - %d\n", "拿offer", 6666);
    return 0;
}